고정밀 이벤트 타이머
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
고정밀 이벤트 타이머(HPET)는 프로그래머블 인터벌 타이머 및 인텔 8253과 유사한 64비트 업 카운터와 비교기로 구성된 하드웨어 타이머이다. HPET는 ACPI를 통해 메모리 맵 I/O를 사용하여 프로그래밍되며, 원샷 또는 주기적 모드로 인터럽트를 생성할 수 있다. 현대 PC의 사우스브리지 칩에 통합되어 있으며, 멀티 코어 CPU 시스템에서 사용될 수 있다. HPET는 8254 PIT 및 RTC를 보완 또는 대체하며, 높은 해상도로 주기적인 인터럽트를 생성하여 멀티미디어 스트림 동기화, CPU 절전 모드 개선 등에 기여한다. 하지만 인터럽트 누락, 높은 오차 등의 문제점도 존재한다. HPET는 Windows Vista 이후 버전, 리눅스 커널 2.6 이후 버전 등에서 지원되며, 이전 운영 체제에서는 다른 타이머를 사용한다.
더 읽어볼만한 페이지
- 집적 회로 - 실시간 시계
실시간 시계(RTC)는 CPU 개입 없이 독립적으로 시간을 유지하며, 저전력 소비와 시간 민감 작업의 부담 감소, 절전 모드 유지를 위해 디지털 카운터 회로, 결정 진동자, 배터리 등으로 구성되어 PC 메인보드에 부착되거나 사우스브리지 칩 또는 마이크로컨트롤러에 내장된다. - 집적 회로 - NMOS 논리
NMOS 논리는 n형 MOSFET만을 사용하여 논리 게이트를 구현하는 방식으로, 저항을 부하로 사용하여 NOR 게이트 등을 구현할 수 있지만, Low에서 High로의 전환 속도가 느리고 전력 소비가 높아 CMOS 논리에 밀려 현재는 제한적으로 사용된다.
고정밀 이벤트 타이머 | |
---|---|
기본 정보 | |
유형 | 하드웨어 타이머 |
사용처 | 개인용 컴퓨터 |
추가 정보 | |
설명 | 개인용 컴퓨터에서 사용되는 하드웨어 타이머임 |
참고 | Microsoft Multimedia Timers |
2. 특징
HPET는 최소 10MHz의 주파수로 카운트하는 64비트 업 카운터 (메인 카운터)와 일련의 비교기(최소 3개, 최대 256개)로 구성된다. 비교기는 32비트 또는 64비트일 수 있다. HPET는 ACPI를 통해 검색 가능한 메모리 맵 I/O 창을 통해 프로그래밍된다. 비교기는 운영 체제에서 구동될 수 있으며, 예를 들어 스케줄링을 위해 CPU당 하나의 타이머를 제공하거나 응용 프로그램에서 구동될 수 있다.
2. 1. 구성 요소
HPET 칩은 프로그래머블 인터벌 타이머(Programmable interval timer) 및 인텔 8253(Intel 8253)과 같이 10MHz 주파수의 64비트 업 카운터와 최소 3개(최대 256개)의 독립적인 64비트 비교기로 구성된다.[11] 비교기는 사용자 소프트웨어의 임의 인터럽트 발생을 위해 29개의 32비트 비교기/타이머를 추가로 포함하고 있지만, 일부 운영 체제는 멀티 코어 CPU 시스템에서 해당 타이머를 사용하도록 구성할 수 없다.64비트 카운터 값의 최하위 비트가 해당 비트와 동일한 값일 경우, 비교기/타이머는 인터럽트를 생성할 수 있다. 비교기/타이머는 원샷 모드 또는 주기적 모드로 사용할 수 있는데, 원샷 모드는 카운터 값이 비교기의 레지스터에 저장된 값에 도달했을 때 인터럽트를 발생시키고, 주기적 모드는 정의된 간격으로 인터럽트를 생성한다.
HPET의 32/64비트 확장은 ACPI(Advanced Configuration and Power Interface) BIOS(Basic Input/Output System)에 의해 제공되는 메모리 맵 I/O를 통해서만 가능하다. 마더보드에 HPET 칩을 동시에 8개까지 탑재할 수 있으며, 프론트 사이드 버스 (FSB)와 DDR-RAM은 2개의 HPET 칩을 필요로 한다. 이는 현대적인 PC가 64개의 인터럽트와 IRQ가 사용 가능한 타이머를 위해 6개의 8253-타이머 호환 카운터/비교기와 58개의 32비트 HPET/비교기를 가진다는 것을 의미한다.
비교적 현대적인 PC는 HPET 회로를 사우스브리지에 통합하고 있다.[17]
2. 2. 동작 방식
HPET 칩은 프로그래머블 인터벌 타이머(Programmable interval timer) 및 인텔 8253(Intel 8253)과 같이 10MHz 주파수의 64비트 업 카운터와 최소 3개(최대 256개)의 독립적인 64비트 비교기로 구성된다.[11] 인터럽트 발생을 위해 29개의 32비트 비교기/타이머를 포함하고 있지만, 일부 운영 체제는 멀티 코어 CPU 시스템에서 해당 타이머를 사용하도록 구성할 수 없다.64비트 카운터 값의 최하위 비트가 해당 비트와 동일한 값일 경우, 비교기/타이머는 인터럽트를 생성할 수 있다. 비교기/타이머는 원샷 모드 또는 주기적 모드로 사용할 수 있다. 원샷 모드는 카운터 값이 비교기의 레지스터에 저장된 값에 도달했을 경우에 인터럽트를 발생시킨다. 주기적 모드는 정의된 간격으로 인터럽트를 생성한다.
ACPI(Advanced Configuration and Power Interface) BIOS(Basic Input/Output System)에 의해 제공되는 메모리 맵 I/O를 통해서만 HPET의 32/64비트 확장이 가능하다. HPET 칩을 마더보드에 동시에 8개까지 탑재할 수 있다. 프론트 사이드 버스 (FSB)와 DDR-RAM은 2개의 HPET 칩을 필요로 한다.
비교적 현대적인 PC는 HPET 회로를 사우스브리지 칩에 통합하고 있다.[11]
3. 응용 프로그램
HPET는 CMOS RTC에 비해 높은 해상도로 더 많은 정기적인 인터럽트를 발생시킬 수 있어, 멀티미디어 스트림을 동기화하여 부드러운 재생을 제공하고, x86 기반 CPU의 RDTSC영어 명령어와 같은 다른 타임스탬프 계산 횟수를 줄이는 데 자주 사용된다.[2] 이는 CPU가 타이머의 낮은 해상도를 보완하기 위해 사이클을 낭비할 필요가 없고, 더 적극적인 CPU 절전 모드 사용을 가능하게 하여 전력 소비를 줄이므로 효율성을 향상시킨다. 고정밀 클럭에 대한 애플리케이션 수준의 요구 외에도, 스케줄러와 다중 프로세서 시스템을 위한 안정적인 클럭 기반 가용성을 통해 OS 수준의 이점이 있다.[2]
4. 이전 기술과의 비교
HPET은 8254 프로그래밍 가능 간격 타이머(PIT)나 RTC 같은 이전 기술보다 더 높은 주파수(최소 10MHz)와 더 넓은 64비트 카운터(32비트 모드 가능)를 제공한다.[18] HPET 사양은 타이머 주파수를 명확히 정의하지 않지만, 최소 10MHz를 요구하며, 실제 주파수는 하드웨어 레지스터를 통해 운영 체제에 제공된다. 일반적인 값은 14.318MHz이다.
HPET는 LAPIC 타이머, ACPI PM 타이머 등도 보완하고 대체하도록 설계되었다.
4. 1. 8254 프로그래머블 인터벌 타이머 (PIT) 및 실시간 클럭 (RTC)
HPET는 8254 프로그래밍 가능 간격 타이머(Programmable Interval Timer, PIT)와 RTC의 주기적 인터럽트 기능을 보완하고 대체하도록 설계되었다. PIT나 RTC와 같은 구형 타이머에 비해 HPET는 더 높은 주파수(최소 10MHz)와 더 넓은 64비트 카운터를 갖는다(단, 32비트 모드로 구동할 수도 있다).[12]8254나 RTC도 HPET와 마찬가지로 원샷 모드로 사용할 수 있지만, 설정 과정이 매우 느리기 때문에 정확한 스케줄링이 필요한 작업에는 사용되지 않고[13], 시간 간격을 매우 작게 설정한 주기 모드로 대신 사용되었다. 예를 들어, 애플리케이션이 몇 밀리초 정도의 짧은 대기를 여러 번 수행하는 경우, 8254 또는 RTC의 원샷 타이머를 사용하면 설정 비용이 많이 들기 때문에 1밀리초 간격의 주기 타이머 모드로 작동시키는 것이 더 낫다. 그러나 그렇게 하면 애플리케이션이 실제로는 긴 주기의 동작을 원하는데도 1밀리초마다 불필요한 인터럽트가 발생한다. 반면 HPET의 원샷 타이머는 설정 비용이 상당히 작아, 짧은 대기에도 비용을 신경 쓸 필요가 없으므로 불필요한 인터럽트를 피할 수 있다.
4. 2. LAPIC 타이머, ACPI PM 등 (내용 보충 필요)
HPET는 LAPIC 타이머, ACPI PM 타이머 등을 보완하고 대체하도록 설계되었다.HPET는 8254 프로그래밍 가능 간격 타이머와 RTC의 주기적 인터럽트 기능을 보완하고 대체하도록 설계되었다. 이러한 구형 타이머 회로에 비해 HPET는 더 높은 주파수와 더 넓은 64비트 카운터를 가지고 있다(32비트 모드로 구동될 수 있음).[3]
HPET 사양은 타이머 주파수를 정의하지 않으며, ''최소'' 10MHz만 요구한다. 실제 주파수는 주기당 펨토초 수를 나타내는 하드웨어 레지스터를 통해 운영 체제에 제공된다( 상한). 일반적인 값은 표준 8254 주파수인 1.19318MHz의 12배인 14.318MHz이다.
8254 및 RTC는 HPET와 유사한 일회성 모드로 ''사용할 수'' 있지만, 설정 프로세스가 너무 느려서 정밀한 스케줄링이 필요한 작업에는 실제로 일회성 모드가 사용되지 않는다.[4] 대신, 8254 및 RTC는 일반적으로 매우 짧은 시간 간격으로 주기적 모드로 사용된다. 예를 들어, 응용 프로그램이 몇 개의 짧은 (몇 밀리초 정도) 대기를 수행해야 하는 경우, 8254 또는 RTC 일회성 타이머의 높은 설정 비용 때문에 1ms 주기로 지속적으로 실행되는 주기적 타이머를 사용하는 것이 더 좋다. 이렇게 하면 응용 프로그램이 실제 작업을 덜 자주 수행해야 하더라도 매 밀리초마다 인터럽트가 발생한다. HPET를 사용하면 HPET 일회성 타이머의 설정 비용이 훨씬 적기 때문에 추가 인터럽트를 피할 수 있다.
5. 호환성
HPET는 이전 운영 체제와의 호환성 문제가 있을 수 있다. HPET 이전에 설치된 운영 체제에서는 HPET를 사용할 수 없기 때문에 고급 프로그래밍 가능 인터럽트 컨트롤러(APIC) 등 HPET가 아닌 다른 하드웨어 타이머를 사용한다.[20][21] 최신 운영 체제는 HPET와 다른 타이머를 모두 사용할 수 있는 경향이 있으며, 일부 하드웨어는 둘 다 가지고 있다.
리눅스 커널은 HPET를 클럭 소스로 사용할 수 있다. Red Hat MRG 버전 2 문서는 TSC가 오버헤드가 적어 선호되지만, HPET를 대체(fallback) 클럭 소스로 사용한다고 명시한다. 벤치마크에서 TSC는 약 0.6초, HPET는 12초, ACPI 전원 관리 타이머는 약 24초가 걸렸다.[6]
2019년에는 일부 인텔 CPU(커피 레이크)에서 실행될 때 불안정성으로 인해 최신 리눅스 커널에서 HPET를 블랙리스트에 올리기로 결정했다.[7]
5. 1. HPET를 지원하지 않는 운영 체제
HPET이 있기 전에 설치된 OS에서는 HPET을 사용할 수 없기에 다른 하드웨어 타이머를 사용한다. 좀 더 새로운 OS는 둘 다 사용하도록 하는 경향이 있어, 몇몇 하드웨어는 HPET와 다른 하드웨어 타이머를 모두 가지고 있다.
최신 운영 체제는 HPET와 다른 타이머를 모두 사용할 수 있는 경향이 있다. 실제로, 대부분의 최신 사우스브리지 칩은 운영 체제에서 사용되는지 여부와 관계없이 PIT, PIC, 고급 프로그래밍 가능 인터럽트 컨트롤러(APIC) 및 RTC 장치의 레거시 지원 인스턴스를 실리콘에 통합하여 매우 현대적인 PC에서 이전 운영 체제를 실행하는 데 도움이 된다.
HPET을 사용할 수 없는 운영 체제는 다음과 같다.
- 윈도우 XP[20], 윈도우 서버 2003 및 그 이전 버전의 윈도우
- 2.6 버전 이전의 리눅스 커널[21]
- Windows XP SP1 및 그 이전 버전의 Windows
- 리눅스 커널 2.6 이전
HPET을 사용할 수 있는 운영 체제는 다음과 같다.
- Windows XP SP3
- 윈도우 서버 2003 SP2
- 윈도우 서버 2008
- 윈도우 서버 2008 R2
- 윈도우 비스타
- 윈도우 7
- x86 기반 버전의 Mac OS X
- 커널 2.6(또는 이후)을 사용하는 리눅스 운영 체제
- FreeBSD[5]
- OpenSolaris.
리눅스 커널은 HPET를 클럭 소스로 사용할 수 있다. Red Hat MRG 버전 2의 문서는 TSC가 오버헤드가 훨씬 적기 때문에 선호되는 클럭 소스라고 명시하고 있지만, 폴백으로 HPET를 사용한다. 1,000만 건의 이벤트 수를 대상으로 하는 해당 환경의 벤치마크에서 TSC는 약 0.6초, HPET는 12초 약간 넘게 걸렸고, ACPI 전원 관리 타이머는 약 24초가 걸렸다.[6]
2019년에는 일부 인텔 CPU(커피 레이크)에서 실행될 때 불안정성으로 인해 최신 리눅스 커널에서 HPET를 블랙리스트에 올리기로 결정했다.[7]
5. 2. HPET를 지원하는 운영 체제
HPET를 지원하는 운영 체제는 다음과 같다.HPET를 지원하지 않는 운영 체제는 다음과 같다.
- 윈도우 XP[20], 윈도우 서버 2003 및 그 이전 버전의 윈도우
- 버전 2.6 이전의 리눅스 커널[21]
HPET가 등장하기 전의 운영체제는 다른 타이머(PIT, PIC, 고급 프로그래밍 가능 인터럽트 컨트롤러(APIC), RTC)를 사용한다. 최신 운영 체제는 HPET와 다른 타이머를 모두 사용할 수 있다. 최신 사우스브리지 칩은 운영 체제에서 사용하는지와 관계없이 PIT, PIC, APIC 및 RTC 장치의 레거시 지원 인스턴스를 통합하여 구형 운영 체제를 지원한다.
리눅스 커널은 HPET를 클럭 소스로 사용할 수 있다. Red Hat MRG 버전 2 문서는 TSC가 오버헤드가 적어 선호되지만, HPET를 대체(fallback) 클럭 소스로 사용한다고 명시한다. 벤치마크에서 TSC는 약 0.6초, HPET는 12초, ACPI 전원 관리 타이머는 약 24초가 걸렸다.[6]
2019년, 일부 인텔 CPU(커피 레이크)에서 실행될 때 불안정성 문제로 최신 리눅스 커널에서 HPET를 블랙리스트에 올리기로 결정했다.[7]
6. 문제점
HPET는 실제 타이머 값과 프로그래밍된 목표 값을 동일성으로 비교하기 때문에 인터럽트가 누락될 수 있다.[8] 비마스크 인터럽트 실행 시 발생하는 경합 조건과 일부 칩셋의 지연은 이러한 문제를 심화시킨다.[8] VMware 문서에 따르면, HPET의 정밀도 및 읽기 속도에 대한 문제점도 존재하며, 일부 구현에서는 큰 오차가 발견되기도 한다.[9]
6. 1. 인터럽트 누락
HPET는 0으로 카운트다운하여 인터럽트를 한 번 발생시킨 후 멈추는 일회성 장치가 아니라, 위로 계속 카운트하는 타이머이다. HPET는 실제 타이머 값과 프로그래밍된 목표 값을 "크거나 같음"이 아닌 동일성으로 비교하기 때문에, 비교기 값이 칩의 레지스터에 기록될 때 목표 시간이 이미 지났다면 인터럽트가 누락될 수 있다.[8] 이러한 경우, 의도한 인터럽트가 누락될 뿐만 아니라, 실제로는 훨씬 미래(약 232 또는 264 카운트)에 설정된다.[9] 실행 시간에 대한 하드 상한이 없는 비마스크 인터럽트(SMI)가 있는 경우, 이 경합 조건은 설정 후 타이머를 시간 소모적인 재확인을 필요로 하며, 완전히 피하기 어렵다. 일부 칩셋에서처럼 비교기 값이 타이머와 즉시 동기화되지 않고 한두 틱 지연될 경우, 이러한 어려움이 더욱 악화된다.[8]위에 논의된 경합 조건 외에도, VMware 문서는 몇 가지 다른 단점을 나열한다. "사양은 타이머가 특히 미세하게, 낮은 드리프트를 가지거나 빠르게 읽을 것을 요구하지 않는다. 일부 일반적인 구현은 카운터를 약 18 MHz로 실행하며, ACPI 타이머와 마찬가지로 HPET를 읽는 데 약 같은 시간(1 μs–2 μs)이 필요하다. 기간 레지스터가 백만 분의 800 이상 오차가 있는 구현이 관찰되었다."[9]
6. 2. 기타 문제점
HPET는 0으로 카운트다운하여 인터럽트를 한 번 발생시킨 후 멈추는 일회성 장치가 아니라, 위로 계속 카운트하는 타이머이다. HPET는 실제 타이머 값과 프로그래밍된 목표 값을 "크거나 같음"이 아닌 동일성으로 비교하기 때문에, 비교기 값이 칩의 레지스터에 기록될 때 목표 시간이 이미 지났다면 인터럽트가 누락될 수 있다.[8] 이러한 경우, 의도한 인터럽트가 누락될 뿐만 아니라, 실제로는 훨씬 미래(약 232 또는 264 카운트)에 설정된다.[9] 실행 시간에 대한 하드 상한이 없는 비마스크 인터럽트 (예: 시스템 관리 인터럽트(SMI))가 있는 경우, 이 경합 조건은 설정 후 타이머를 시간 소모적인 재확인을 필요로 하며, 완전히 피하기 어렵다. 일부 칩셋에서처럼 비교기 값이 타이머와 즉시 동기화되지 않고 한두 틱 지연될 경우, 이러한 어려움이 더욱 악화된다.[8]위에 논의된 경합 조건 외에도, VMware 문서는 몇 가지 다른 단점을 나열한다. "사양은 타이머가 특히 미세하게, 낮은 드리프트를 가지거나 빠르게 읽을 것을 요구하지 않는다. 일부 일반적인 구현은 카운터를 약 18MHz로 실행하며, ACPI 타이머와 마찬가지로 HPET를 읽는 데 약 같은 시간(1μs–2μs)이 필요하다. 기간 레지스터가 백만 분의 800 이상 오차가 있는 구현이 관찰되었다."[9]
참조
[1]
웹사이트
Multimedia Timers
http://msdn.microsof[...]
Microsoft
2010-10-20
[2]
웹사이트
IA-PC HPET (High Precision Event Timers) Specification
https://www.intel.co[...]
Intel
2022-08-30
[3]
간행물
IA-PC HPET (High Precision Event Timers) Specification (revision 1.0a)
http://www.intel.com[...]
2012-06-15
[4]
간행물
Guidelines For Providing Multimedia Timer Support
http://www.microsoft[...]
2009-11-10
[5]
웹사이트
FreeBSD Man Pages: hpet(4)
https://www.freebsd.[...]
[6]
웹사이트
Chapter 15. Timestamping
https://access.redha[...]
Access.redhat.com
2014-02-14
[7]
웹사이트
The Linux Kernel Disabling HPET For Intel Coffee Lake
https://www.phoronix[...]
[8]
웹사이트
x86: hpet: Work around hardware stupidity
https://git.kernel.o[...]
[9]
문서
Timekeeping in VMware Virtual Machines (for VMware vSphere 5.0, Workstation 8.0, Fusion 4.0)
http://www.vmware.co[...]
[10]
문서
Multimedia Timers
http://msdn.microsof[...]
[11]
문서
ダイの上に高度に統合されてはいるが、BIOSはACPIでしばしば誤ってHPETのセットアップをIntel 8253モードだけで初期化する。ACPIが正しくセットアップしない場合、OSはHPETを列挙できない。そしてBIOSとOS開発者は対応できないために放っておく。HPETは高速なシステムを満たすためにある。もし、HPETをBIOSがACPIで正しくセットアップできるのならば、ACPI MMIOページが最初に 0xFED00000 と次に 0xFED80000 があるはずである。
[12]
간행물
IA-PC HPET (High Precision Event Timers) Specification (revision 1.0a)
http://www.intel.com[...]
2015-02-01
[13]
간행물
Guidelines For Providing Multimedia Timer Support
http://www.microsoft[...]
2009-11-10
[14]
문서
Windows XP SP2 는, HPET 타이머 를 (PNP0103 식별자 의 디바이스 로서) 인식한다.HPET 를 발견했 을 때 (예 를 들어, Intel DQ45CB 마더보드), 디바이스 매니저 (스타트/컨트롤 패널/시스템/하드웨어/디바이스 매니저) 의 시스템 디바이스 중에서 "고정밀 이벤트 타이머" 와 표시된다.그러나, 이 장치 는 드라이버 가 없고, 사용 되는 것 은 전혀 없다.
[15]
문서
Linux 커널 에서는, 오리지날 의 "rtc" 드라이버 보다도, 새로운 "rct-cmos" 하드웨어 클럭 디바이스 드라이버 를 필요 로 한다.
[16]
문서
이전의 운영 체제는 HPET을 지원하지 못하고, 실시간 클럭이라는 이전부터 쓰이던 옛날 타이머 기능을 사용했다.
[17]
문서
칩 다이위에 고도로 통합되어 있지만 BIOS는 ACPI로 가끔 오동작하여 HPET의 설정을 [[인텔 8253]] 모드로만 초기화한다. ACPI가 제대로 설정하지 않았을 때 OS는 HPET을 열거할 수 없다. 그리고 BIOS와 운영 체제 개발자는 대응할 수 없기에 이를 방치한다. HPET은 고속 시스템을 충족시키기 위해 있다. 혹시 HPET을 BIOS가 ACPI로 제대로 설정할 수 있다면 ACPI MMIO 페이지가 최초에 0xFED00000이며 그 다음에 0xFED80000가 있을 것이다.
[18]
웹인용
IA-PC HPET (High Precision Event Timers) Specification (revision 1.0a)
http://www.intel.com[...]
2007-07-16
[19]
웹인용
Guidelines For Providing Multimedia Timer Support
http://www.microsoft[...]
2009-11-10
[20]
문서
윈도우 XP SP2는 HPET 타이머를 (PNP0103 디바이스 식별자로써) 인식한다. HPET을 발견하였을 때(예를 들어 인텔 DQ45CB 메인보드) 장치 관리자(시작 → 제어판 → 시스템 → 하드웨어 → 장치 관리자)의 시스템 장치 중에서 "고정밀 이벤트 타이머"로 표시된다. 하지만 이 장치는 드라이버가 없어 사용될 일은 전혀없다.
[21]
문서
리눅스 커널에서는 오리지널인 "rtc" 드라이버 보다도 새로운 "rct-cmos" 하드웨어 클럭 디바이스 드라이버를 필요로 한다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com